草庐IT

javascript oop、instanceof 和基类

全部标签

java - "instanceof"与 assertEquals 的 assertTrue

我想知道为什么会失败:assertEquals(Key.class,expectedKey.getClass());这不是:assertTrue(expectedKeyinstanceofKey);两者有什么区别吗? 最佳答案 因为expectedKey很可能是Key的子类的一个实例。您从失败的断言中获得的错误消息应该会告诉您。阅读它。“s”,例如是java.lang.Object的一个实例,但它的类不是java.lang.Object,而是java.lang.String。 关于jav

java - 为什么这个 instanceof 代码可以工作并且不会导致编译时错误?

在下面的代码中,x的类型是I(虽然x也实现了J但在编译时不知道)那么为什么(1)处的代码不会导致编译时错误。因为在编译时只考虑引用的类型。publicclassMyClass{publicstaticvoidmain(String[]args){Ix=newD();if(xinstanceofJ)//(1)System.out.println("J");}}interfaceI{}interfaceJ{}classCimplementsI{}classDextendsCimplementsJ{} 最佳答案 instanceof用于运

java - isInstance是instanceof的一个 'dynamic equivalent'是什么意思?

“动态等效”是什么意思?我只是想知道使用this.getClass().isInstance(aClass)而不是thisinstanceofaClass的目的是什么?有区别吗?DeterminesifthespecifiedObjectisassignment-compatiblewiththeobjectrepresentedbythisClass.ThismethodisthedynamicequivalentoftheJavalanguageinstanceofoperator 最佳答案 是的。不仅顺序不一样,而且objec

c# - 基类与实用类

应该优先选择两者中的哪一个?A、B、C类调用了一些方法。是否应该将这些方法封装在类D(A、B和C的基础)中?或是否应该将这些方法封装在类U中,而其他类则创建它的对象以根据需要使用这些方法。应该根据什么做出决定?谢谢。 最佳答案 您应该创建一个static实用程序类。只有在真正有意义的情况下才使用继承——如果A、B和C实际上是D. 关于c#-基类与实用类,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

java - 为什么在 T 是类型参数而 t 是变量的情况下不允许使用 "t instanceof T"?

Eclipse表示由于泛型类型橡皮擦,类型参数不允许使用instanceof操作。我同意在运行时不会保留任何类型信息。但是请考虑以下类的通用声明:classSomeClass{Tt;SomeClass(Objecto){System.out.println(oinstanceofT);//Illegal}}在运行时,不会出现T!但是如果我实例化这个Integer类型的类,那么对应的对象就会有一个Integer类型的字段t。那么,为什么我不能用T检查一个变量的类型,它可以在运行时被Integer替换。我实际上会做类似“oinstanceofInteger”的事情。在哪些情况下,允许带有类

java - 使用基类实例在派生类中访问的 protected 成员

我在派生类中创建了基类的实例并试图访问protected成员。我可以直接访问派生类中的protected成员,而无需实例化基类。基类:packagecom.core;publicclassMyCollection{protectedIntegerintg;}同一包中的派生类-packagecom.core;publicclassMyCollection3extendsMyCollection{publicvoidtest(){MyCollectionmc=newMyCollection();mc.intg=1;//Works}}不同包中的派生类-packagesecondary;imp

java:结合了instanceof和cast?

(请不要建议我应该对X进行更多抽象并向其添加另一个方法。)在C++中,当我有一个变量x类型X*如果它也是Y*类型,我想做一些具体的事情(Y是X的子类),我这样写:if(Y*y=dynamic_cast(x)){//nowdosthwithy}同样的事情在Java中似乎是不可能的(或者是吗?)。我已经阅读了这段Java代码:if(xinstanceofY){Yy=(Y)x;//...}有时,当您没有变量时x但它是一个更复杂的表达式,正因为这个问题,你需要在Java中使用一个虚拟变量:Xx=something();if(xinstanceofY){Yy=(Y)x;//...}//xnotn

java - instanceof运算符java的复杂性

我想知道在Java中使用instanceof运算符的计算成本有多高,并且想知道是否有更好的替代方案可用 最佳答案 另一种方法是避免使用instanceof并正确设计您的类(在OO意义上)。因为instanceof运算符有一个相应的“instanceof”字节码指令,所以可能不会有更高性能的方法;但这也可能取决于实际JVM的优化方式。 关于java-instanceof运算符java的复杂性,我们在StackOverflow上找到一个类似的问题: https:/

java - instanceof 运算符在原始和包装器类型数组的情况下

intprimitivI[]={1,1,1};IntegerwrapperI[]={2,22,2};1.System.out.println(primitivIinstanceofObject);//true2.System.out.println(primitivIinstanceofObject[]);//CompilationErrorWhy????3.System.out.println(wrapperIinstanceofObject);//true4.System.out.println(wrapperIinstanceofObject[]);//true这里我有两个整数数

java - 外部基类的访问字段

在Java中,内部类通常可以访问外部类的私有(private)成员。在编写Android应用程序时,我有一个静态内部类扩展了它的外部类。事实证明,无法访问外部类的私有(private)字段:classOuter{privateintm_field=1;staticclassInnerextendsOuter{Inner(){m_field=2;}}}它给出了一个令人困惑的错误信息:error:non-staticvariablem_fieldcannotbereferencedfromastaticcontext即使除了类本身之外没有什么是静态的。当字段m_field被保护时,它编译没